package org.xyl.context;

import java.util.*;
import org.xyl.context.RuntimeContext.*;

/**
 * 运行时上下文提供器 - 负责获取设备实时状态数据
 */
public class RuntimeContextProvider {
    
    /**
     * 获取设备运行时上下文
     * 这里模拟从设备管理平台获取数据，实际实现需要连接真实API
     */
    public RuntimeContext getRuntimeContext(String deviceId) {
        RuntimeContext context = new RuntimeContext(deviceId);
        
        // 模拟获取设备实时状态
        Map<String, Object> statusData = fetchDeviceStatus(deviceId);
        for (Map.Entry<String, Object> entry : statusData.entrySet()) {
            context.addStatusMetric(entry.getKey(), entry.getValue());
        }
        
        // 模拟获取设备日志
        List<LogEntry> logs = fetchDeviceLogs(deviceId);
        for (LogEntry log : logs) {
            context.addLogEntry(log);
        }
        
        return context;
    }
    
    // 模拟从设备管理平台获取设备状态
    private Map<String, Object> fetchDeviceStatus(String deviceId) {
        Map<String, Object> status = new HashMap<>();
        
        // 为特定设备ID返回模拟数据
        if ("A123".equals(deviceId)) {
            status.put("batteryVoltage", 2.9);  // 电池电压
            status.put("signalStrength", -108);  // 信号强度(dBm)
            status.put("lastOnlineTime", System.currentTimeMillis() - 2 * 60 * 60 * 1000);  // 2小时前
            status.put("refreshStatus", "failed");  // 刷新状态
        } else {
            // 默认状态
            status.put("batteryVoltage", 3.2);
            status.put("signalStrength", -85);
            status.put("lastOnlineTime", System.currentTimeMillis() - 5 * 60 * 1000);  // 5分钟前
            status.put("refreshStatus", "normal");
        }
        
        return status;
    }
    
    // 模拟获取设备日志
    private List<LogEntry> fetchDeviceLogs(String deviceId) {
        List<LogEntry> logs = new ArrayList<>();
        
        // 为特定设备ID返回模拟日志
        if ("A123".equals(deviceId)) {
            // 添加错误日志
            logs.add(new LogEntry(
                "ERROR", 
                "网络注册失败，电量不足警告", 
                new Date(System.currentTimeMillis() - 2 * 60 * 60 * 1000)
            ));
            
            logs.add(new LogEntry(
                "WARNING", 
                "电池电压低于阈值", 
                new Date(System.currentTimeMillis() - 3 * 60 * 60 * 1000)
            ));
        }
        
        return logs;
    }
}